home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 26 / CU Amiga Magazine's Super CD-ROM 26 (1998)(EMAP Images)(GB)[!][issue 1998-09].iso / CUCD / Utilities / MARInA / Install-Guide / install.rexx next >
OS/2 REXX Batch file  |  1998-07-12  |  52KB  |  2,319 lines

  1. /*
  2.   MARInA System © TNE) 1997/98
  3.  
  4.   MARInA Installer Installation Script
  5.   for MARInA Base-Archive itself (=InstBase).
  6. */
  7.  
  8. OPTIONS RESULTS
  9.  
  10. CALL Init
  11.  
  12. /* -------------- BEGIN Definition Block ------------------ */
  13.  
  14. InstApp = "MARInA  © 5'98 TNE)"
  15. Author="©'98 Tom Neidhardt, 91058 Erlangen, GERMANY"
  16.  
  17. /* The Base Archive must have the same name for InstBase and InstModule */
  18. InstBase='MARInA'    /* do not use more than 12 characters here! */
  19. InstModule='MARInA'  /* do not use more than 12 characters here! */
  20.  
  21. /* Supply at least one Guide with the Name  <InstBase>'.guide'
  22.    which has a Headline beginning with   <InstBase>', ©'       */
  23.  
  24. ObligedFile = RootPath'SYS/Choice_MARInA_bin/grep'
  25. CALL CheckInstallDir
  26.  
  27. CALL CreateLogFile
  28.  
  29. /* ------------------------- */
  30.  
  31. ADDRESS COMMAND RootPath'SYS/Choice_MARInA_bin/SWindow >NIL: "'InstModule', ©#?" p p p s'
  32. ADDRESS COMMAND RootPath'SYS/Choice_MARInA_bin/SWindow >NIL: "'InstModule', ©#?" b'
  33.  
  34. Msg="_Intro1"
  35. Parameter1 = AppName
  36. CALL ShowMessage
  37.  
  38. IF (Action = 0) THEN CALL ExitMe
  39.  
  40. Msg="_Intro2"
  41. Parameter1 = AppName
  42. CALL ShowMessage
  43.  
  44. IF (Action = 0) THEN CALL ExitMe
  45.  
  46. /* ------------------------- */
  47. CALL RexxInstallInfo
  48. CALL Create_UnInstallScript
  49.  
  50. /* ------------------------- */
  51. ObligedFile = RootPath'SYS/Inst_Voice/deutsch/ok.8SVX'
  52. CALL ExistsFile
  53.  
  54. /* ------------------------- */
  55.  
  56. Msg="h_direct_ENV"
  57. Parameter1 = AppName
  58. CALL ShowMessage
  59.  
  60. IF (Action = 0) THEN
  61.    CALL ExitMe
  62.  
  63. InstName = ' Direct ENV: & ENVARC: '
  64. SourceDir = RootPath'SYS/Inst_ENV'
  65. DestDir1 = 'ENVARC:'
  66. DestDir2 = 'ENV:'
  67. CALL CopyAction
  68.  
  69. /* ------------------------- */
  70. InstName = ' SysVoice '
  71. CALL InstallVoice
  72.  
  73. /* ------------------------- */
  74. InstName = ' MARInA_rexx '
  75. InstAssign = 'MARInA_rexx:'
  76. InstSource = RootPath'SYS/Choice_MARInA'
  77. InstDest1 = 'ENV:MARInA'
  78. InstDest2 = 'ENVARC:MARInA'
  79.  
  80. MsgSrcDest = 'c1_MARInA_rexx_copy'
  81. MsgOtherDir = 'c3_OtherRexxDir'
  82.  
  83. CALL Copy_SrcDest
  84.  
  85. MARInA_rexx = Selected_Dest
  86. MARInA_rexx_Dir = Selected_Dest_Dir
  87.  
  88. /* ------------------------- */
  89. InstName = ' MARInA_bin '
  90.  
  91. InstAssign = 'MARInA_bin:'
  92. InstSource = RootPath'SYS/Choice_MARInA_bin'
  93. InstDest1 = 'SYS:MARInA_bin'
  94.  
  95. MsgSrcDest = 'd1_MARInA_bin_copy'
  96. MsgOtherDir = 'd3_OtherBinDir'
  97. DoCheck = 1
  98. CALL Copy_SrcDest
  99.  
  100. MARInA_bin = Selected_Dest
  101. MARInA_bin_Dir = Selected_Dest_Dir
  102.  
  103. /* ------------------------- */
  104. Msg="e_MARInA_bin_Infos"
  105. Parameter1 = AppName
  106. CALL ShowMessage
  107.  
  108. /* ------------------------- */
  109. InstName = ' Libs & Catalogs & Prefs '
  110. SourceDir=RootPath'SYS/Inst_SYS'
  111. DestDir1='SYS:'
  112. DoCheck = 1
  113. CALL CopyAction
  114.  
  115. /* ------------------------- */
  116. CALL CopyRefTable
  117.  
  118. ADDRESS COMMAND
  119.     'setenv RefTable/Dir-MARInA_Rexx 'MARInA_rexx_Dir
  120.     'setenv RefTable/Dir-MARInA_bin 'MARInA_bin_Dir
  121.     copy' ENV:RefTable/Dir-MARInA_REXX ENVARC:RefTable CLONE QUIET'
  122.     copy' ENV:RefTable/Dir-MARInA_bin ENVARC:RefTable CLONE QUIET'
  123.  
  124. CALL DirectENV
  125.  
  126. /* ------------------------- */
  127. Msg="j_ManualServerInfo"
  128. Parameter1 = AppName
  129. CALL ShowMessage
  130.  
  131. /* ------------------------- */
  132. Msg="m1_assigns_startup"
  133. Parameter1 = AppName
  134. Parameter2 = MARInA_bin
  135. Parameter3 = MARInA_rexx
  136. CALL ShowMessage
  137.  
  138. Msg_Enhance1 = 'm2_assigns_startup'
  139. Parameter1 = AppName
  140. Module = RootPath'SYS/ModAS/ModAS.part'
  141. First12 = ';ModAS © TNE'
  142. Last12 =  ';END ModAS P'
  143. CALL EnhanceStartup
  144.  
  145. /* ------------------------- */
  146. Startup:
  147.  
  148. InstName = ' Startup-File '
  149. Init_File = 'SYS:StartSys/Install/MARInA'
  150.  
  151. Command.1 = 'echo " Installing..'InstApp'... The Ultimate Wizard System."'
  152. Command.2 = 'assign MARInA_bin: 'MARInA_bin
  153. Command.3 = 'assign MARInA_bin: SYS:c ADD'
  154. Command.4 = 'assign MARInA_bin: SYS:Prefs ADD'
  155. Command.5 = 'assign MARInA_bin: SYS:System ADD'
  156. Command.6 = 'assign MARInA_bin: SYS:Tools ADD'
  157. Command.7 = 'assign MARInA_bin: SYS:Tools/Commodities ADD'
  158. Command.8 = 'assign MARInA_bin: SYS:Utilities ADD'
  159. Command.9 = 'assign MARInA_rexx: 'MARInA_rexx
  160. Command.10 = 'path MARInA_bin: ADD'
  161. n=10
  162.  
  163. CALL Create_InitScript
  164.  
  165. /* ------------------------- */
  166. CALL Config_MARInAPrefs
  167.  
  168. InstName = ' IDer Prefs '
  169. CALL IDerPrefs
  170.  
  171. InstName = ' MARInA Docs '
  172. CALL CopyHelp
  173.  
  174. /* ------------------------- */
  175. Msg="q_enhance_Infos"
  176. Parameter1 = AppName
  177. CALL ShowMessage
  178.  
  179. /* ------------------------- */
  180. InstName = ' MARInA Trash '
  181. CALL CreateTrash
  182.  
  183. /* ------------------------- */
  184. Msg="r_ExampleConfigs"
  185. Parameter1 = AppName
  186. CALL ShowMessage
  187.  
  188. /* ------------------------- */
  189. CALL RenameIcons
  190.  
  191. InstName = ' ToolManager '
  192. CALL TM_Dock
  193.  
  194. /* ------------------------- */
  195. CALL Un_UnInstallScripts
  196.  
  197. Result = PRAGMA('DIRECTORY', CurrentDir)
  198.  
  199. Msg="_last_Infos"
  200. Parameter1 = AppName
  201. CALL ShowMessage
  202.  
  203. ADDRESS COMMAND
  204. 'setenv ACTUALPATH 'RootPath'Extras'
  205. '${RefTable/File-Manager}'
  206.  
  207. MustQuit=1
  208. CALL ExitMe
  209.  
  210.  
  211.  
  212.  
  213. /* -------------- BEGIN Specific Procedures ------------------ */
  214.  
  215. CopyRefTable:
  216.  
  217.  DO FOREVER
  218.  
  219.    Msg="f_RefTable_copy"
  220.    Parameter1 = AppName
  221.    CALL ShowMessage
  222.  
  223.    IF (Action = 1) THEN
  224.      LEAVE
  225.  
  226.    IF (Action = 2) THEN
  227.      CALL ShowRefHelp
  228.  
  229.    IF (Action = 0) THEN
  230.      CALL ExitMe
  231.  END
  232.  
  233.  InstName = ' RefTable Standard '
  234.  SourceDir = RootPath'SYS/Inst_RefTable'
  235.  DestDir1 = 'ENVARC:RefTable'
  236.  DestDir2 = 'ENV:RefTable'
  237.  DoNotRemoveDir = 1
  238.  CALL CopyAction
  239.  
  240.  /* User RefTable configuring dialog ----- */
  241.  
  242.  Msg="g_UserReferences"
  243.  Parameter1 = AppName
  244.  CALL ShowMessage
  245.  
  246.  Msg="g_UserReferences2"
  247.  Parameter1 = AppName
  248.  CALL ShowMessage
  249.  
  250.  IF (Action = 0) THEN
  251.      CALL ExitMe
  252.  
  253.  ADDRESS COMMAND
  254.      'failat 21'
  255.      list' >'EditList RootPath'SYS/Inst_RefEdit FILES LFORMAT "%s%s"'
  256.      'Install_C:sort from 'EditList' to 'EditList
  257.  
  258.  IF ~Open(fTmp, EditList, 'read') THEN
  259.      Err_ShowMessage(EditList)
  260.  ELSE
  261.   DO
  262.      i=1
  263.  
  264.      DO UNTIL EOF(fTmp)
  265.          File.i = ReadLn(fTmp)
  266.          i=i+1
  267.      END
  268.  
  269.      Closed = Close(fTmp)
  270.      i = i-2
  271.  
  272.      ADDRESS COMMAND
  273.          delete'' EditList 'QUIET'
  274.   END
  275.  
  276.  DO j=1 to i  /* Let user configure own Refs */
  277.  
  278.      Replace = ReadConfigFile(File.j)
  279.      IF (Replace = "NOTHING" | Replace = 'REPLACE') THEN Replace = ''
  280.  
  281.      IF (LASTPOS('/', File.j) > 1) THEN
  282.          DirPos = LASTPOS('/', File.j)
  283.      ELSE
  284.          DirPos = LASTPOS(':', File.j)
  285.  
  286.      Length = LENGTH(File.j)
  287.      FileName = RIGHT(File.j, Length-DirPos)
  288.  
  289.      ENVVAR = '${RefTable/'FileName'}'
  290.      RefT_Ask = 1
  291.      Replaced = 0
  292.      CALL AskEdit
  293.  
  294.      IF (RefJump = 1) THEN LEAVE
  295.  
  296.      Result = WriteConfigFile(File.j, NewPath, Descr1, Descr2, Descr3, Descr4)
  297.  END
  298.  
  299.  RefT_Ask = 0
  300.  
  301.  InstName = ' User References '
  302.  SourceDir = RootPath'SYS/Inst_RefEdit'
  303.  DestDir1 = 'ENV:RefTable'
  304.  DestDir2 = 'ENVARC:RefTable'
  305.  CALL CopyAction
  306.  
  307.  RETURN
  308.  
  309. /*----------------------------------------------------------------*/
  310. AskEdit:
  311.  
  312.   DO FOREVER
  313.  
  314.     IF (Replaced=1 & RefT_Ask=1) THEN
  315.      DO
  316.         IF (UPPER(RIGHT(SelectedFile, 5))='.REXX') THEN
  317.             Replace = 'SYS:RexxC/rx 'SelectedFile
  318.         ELSE
  319.          DO
  320.             IF (UPPER(RIGHT(SelectedFile, 7))='.SCRIPT' | UPPER(RIGHT(SelectedFile,4))='.SCR' | UPPER(RIGHT(SelectedFile,4))='.BAT' | UPPER(RIGHT(SelectedFile,6))='.SHELL' | UPPER(RIGHT(SelectedFile,6))='.START') THEN
  321.                 Replace = 'SYS:c/execute 'SelectedFile
  322.             ELSE
  323.              DO
  324.                 SUp = UPPER(SelectedFile)
  325.                 IF (EXISTS(SelectedFile'.info') & POS('IBROWSE',SUp)=0 & POS('AWEB',SUp)=0 & POS('VOYAGER',SUp)=0) THEN
  326.                     Replace = 'MARInA_bin:WBrun 'SelectedFile
  327.              END
  328.          END
  329.      END
  330.  
  331.     IF (POS('-OPTS', UPPER(ENVVAR)) > 1 | POS('-RX-', UPPER(ENVVAR)) > 1) THEN
  332.         Msg = '_ReferencePrefs.21'
  333.     ELSE
  334.         Msg = '_ReferencePrefs.2'
  335.  
  336.     Parameter1 = ENVVAR
  337.     Parameter2 = Descr1
  338.     Parameter3 = Descr2
  339.     Parameter4 = '(Var. 'j'/'i')'
  340.     PresetString = Replace
  341.  
  342.     IF ~(UPPER(Language)='DEUTSCH') THEN
  343.     DO
  344.         Parameter2 = Descr3
  345.         Parameter3 = Descr4
  346.     END
  347.  
  348.     CALL ShowMessage
  349.     NewPath = SelectedString
  350.  
  351.     IF (Action = 0) THEN
  352.     DO
  353.         RefJump = 1
  354.         LEAVE
  355.     END
  356.  
  357.     IF (Action = 1  & POS('$',SelectedString)=0 ) THEN
  358.         LEAVE
  359.  
  360.     IF (POS('$',SelectedString)>0 ) THEN
  361.     DO
  362.        Msg = '_ReferencePrefs.7'
  363.        Parameter1 = AppName
  364.        CALL ShowMessage
  365.     END
  366.  
  367.     Replaced = 0
  368.     IF (Action=2 & Msg='_ReferencePrefs.2') THEN
  369.     DO
  370.         Msg = '_ReferencePrefs.3'
  371.         Parameter1 = ENVVAR
  372.         Parameter2 = AppName
  373.         ActualPath = 'SYS:'
  374.         ActualName = ''
  375.         CALL ShowMessage
  376.  
  377.         IF (EXISTS(SelectedFile) & ~(SelectedFile = '')) THEN
  378.          DO
  379.             Replaced = 1
  380.             Replace = SelectedFile
  381.          END
  382.     END
  383.  
  384.     IF ((Action=3 & Msg='_ReferencePrefs.2') | (Action=2 & Msg='_ReferencePrefs.21')) THEN
  385.         CALL ShowRefHelp
  386.  
  387.   END
  388.  
  389.   RETURN
  390.  
  391. /*---------------------*/
  392. ShowRefHelp:
  393.  
  394.  Msg = '_ReferencePrefs.4'
  395.  Parameter1 = AppName
  396.  CALL ShowMessage
  397.  
  398.  Msg = '_ReferencePrefs.5'
  399.  Parameter1 = AppName
  400.  CALL ShowMessage
  401.  
  402.  drop Action
  403.  
  404.  RETURN
  405.  
  406.  
  407. /*--------Direct ENV-Files ---------------------------*/
  408.  
  409.  DirectENV:
  410.  
  411.  /*--edit Direct ENV-Files --------*/
  412.  
  413.  Msg="i_EDIT_ENVs"
  414.  Parameter1 = AppName
  415.  CALL ShowMessage
  416.  
  417.  IF (Action = 0) THEN
  418.      CALL ExitMe
  419.  
  420.  /* --------------- */
  421.  
  422.  File = 'ENV:EDIT'
  423.  IF EXISTS(File) THEN
  424.     Replace = ReadConfigFile(File)
  425.  ELSE
  426.     Replace = 'SYS:c/ed'
  427.  
  428.  IF (Replace = "NOTHING" | Replace = "REPLACE") THEN Replace = ""
  429.  
  430.  ENVVAR = '$EDIT'
  431.  ActualPath = 'SYS:'
  432.  j=1
  433.  i=2
  434.  CALL AskEdit
  435.  
  436.  Result = WriteConfigFile(File, NewPath, Descr1, Descr2, Descr3, Descr4)
  437.  
  438.  Command.1 = 'setenv EDIT 'Replace
  439.  
  440.  /* --------------- */
  441.  
  442.  File = 'ENV:EDITOR'
  443.  IF EXISTS(File) THEN
  444.     Replace = ReadConfigFile(File)
  445.  ELSE
  446.     Replace = 'SYS:c/ed'
  447.  
  448.  IF (Replace = "NOTHING" | Replace = "REPLACE") THEN Replace = ""
  449.  
  450.  ENVVAR = '$EDITOR'
  451.  ActualPath = 'SYS:'
  452.  j=2
  453.  i=2
  454.  CALL AskEdit
  455.  
  456.  Result = WriteConfigFile(File, NewPath, Descr1, Descr2, Descr3, Descr4)
  457.  
  458.  Command.2 = 'setenv EDITOR 'Replace
  459.  Command.3 = copy' ENV:EDIT#? ENVARC: CLONE ALL QUIET'
  460.  CALL Do_and_Log
  461.  
  462.  RETURN
  463.  
  464. /*----------------------------*/
  465. ReadConfigFile:
  466.    PARSE ARG name
  467.  
  468.    IF (open(fTmp, name, 'read')) THEN
  469.     DO
  470.      value = ReadLn(fTmp)
  471.  
  472.      Descr1 = ReadLn(fTmp)
  473.      Descr2 = ReadLn(fTmp)
  474.      Descr3 = ReadLn(fTmp)
  475.      Descr4 = ReadLn(fTmp)
  476.  
  477.      Closed = close(fTmp)
  478.     END
  479.    ELSE
  480.     DO
  481.      value = "NOTHING"
  482.     END
  483.  
  484.    RETURN value
  485.  
  486. /*----------------------------*/
  487. WriteConfigFile:     PROCEDURE
  488.    PARSE ARG name, argument, Descr1, Descr2, Descr3, Descr4
  489.  
  490.    ADDRESS COMMAND
  491.     'delete' name 'QUIET'
  492.  
  493.    IF ~open(fTmp, name, 'write') THEN
  494.         Err_ShowMessage(name)
  495.    ELSE
  496.     DO
  497.      Result = WriteLn(fTmp, argument)
  498.      Result = WriteLn(fTmp, Descr1)
  499.      Result = WriteLn(fTmp, Descr2)
  500.      Result = WriteLn(fTmp, Descr3)
  501.      Result = WriteLn(fTmp, Descr4)
  502.  
  503.      Closed = close(fTmp)
  504.     END
  505.  
  506.    RETURN 1
  507.  
  508. /* ---------------------------------------------- */
  509. Config_MARInAPrefs:
  510.  
  511.  Msg="n_ReqPrefs"
  512.  Parameter1 = AppName
  513.  CALL ShowMessage
  514.  
  515.  IF (Action = 0) THEN
  516.      CALL ExitMe
  517.  
  518.  ADDRESS COMMAND
  519.      '${RefTable/Prefs-MARInA-Req}'
  520.  
  521.  RETURN
  522.  
  523.  /* ---------------------------------------------- */
  524.  
  525.  IDerPrefs:
  526.  
  527.  Msg="o_IDer"
  528.  Parameter1 = AppName
  529.  CALL ShowMessage
  530.  
  531.  IF ~EXISTS('ENV:IDer.prefs') THEN
  532.   DO
  533.      Command.1 = copy RootPath'ExampleConfigs/IDer#?.prefs ENV: CLONE QUIET'
  534.      Command.2 = copy RootPath'ExampleConfigs/IDer#?.prefs ENVARC: CLONE QUIET'
  535.   END
  536.  ELSE
  537.   DO
  538.      Command.1 = copy' ENVARC:IDer.prefs ENVARC:IDer.prefsOrig CLONE QUIET'
  539.      Command.2 = copy RootPath'ExampleConfigs/IDer#?.prefs ENV: CLONE QUIET'
  540.      Command.3 = copy RootPath'ExampleConfigs/IDer#?.prefs ENVARC: CLONE QUIET'
  541.   END
  542.  
  543.  CALL Do_and_Log
  544.  
  545.  /* ----Un_IDer:-------- */
  546.  
  547.  
  548.     r=WLine('if exists ENV:IDer.prefsOrig')
  549.     r=WLine('  ask " Restore your  ENVARC:IDer.prefs ? [y/n] "')
  550.     r=WLine('  if warn')
  551.     r=WLine('   copy ENVARC:IDer.prefsOrig ENVARC:IDer.prefs CLONE')
  552.     r=WLine('   copy ENV:IDer.prefsOrig ENV:IDer.prefs CLONE')
  553.     r=WLine('   delete ENVARC:IDer.prefsOrig QUIET')
  554.     r=WLine('   delete ENV:IDer.prefsOrig QUIET')
  555.     r=WLine('   echo " Original ENVARC:IDer.prefs restored!"')
  556.     r=WLine('  endif')
  557.     r=WLine('else')
  558.     r=WLine('  ask " Remove ENVARC:IDer.prefs ? [y/n] "')
  559.     r=WLine('  if warn')
  560.     r=WLine('    delete ENV:IDer.prefs ENVARC:IDer.prefs')
  561.     r=WLine('  endif')
  562.     r=WLine('endif')
  563.     CALL SpaceNextEntry
  564.  
  565.  RETURN
  566.  
  567. /* ------------------------------------------------------- */
  568. InstallVoice:
  569.  
  570. IF (DoesNotExist = 1) THEN
  571.  DO
  572.     Msg = 'l1_NoVoice'
  573.     Parameter1 = AppName
  574.     CALL ShowMessage
  575.  
  576.     DoesNotExist = 0
  577.  END
  578. ELSE
  579.  DO
  580.     Msg = 'l1_Voice'
  581.     Parameter1 = AppName
  582.     CALL ShowMessage
  583.  END
  584.  
  585. IF (Action=0) THEN CALL ExitMe
  586.  
  587. InstName = ' SysVoice '
  588. InstAssign = 'SysVoice:'
  589. SourceDir = RootPath'SYS/Inst_Voice'
  590. DestDir1 = 'SYS:Locale/Voice'
  591. CALL CopyAction
  592.  
  593. RETURN
  594.  
  595. /* ------------------------------------------------------- */
  596. CreateTrash:
  597.  
  598. Command.1 = copy' SYS:.backdrop.bak SYS:.backdrop CLONE QUIET'
  599. Command.2 = copy' SYS:.backdrop SYS:.backdrop.bak CLONE QUIET'
  600.  
  601. ADDRESS COMMAND 'Install_C:search >ENV:SearchResult from SYS:.backdrop :Trashcan'
  602. Result = MyGetENV('SearchResult')
  603. ADDRESS COMMAND 'delete ENV:SearchResult QUIET'
  604.  
  605. IF (EXISTS('SYS:.backdrop') & POS(':Trashcan', Result) = 0) THEN
  606.     Command.3 = 'echo >>SYS:.backdrop ":Trashcan"'
  607. ELSE
  608.     Command.3 = ''
  609.  
  610. Command.4 = RootPath'SYS/Choice_MARInA_bin/DrawIcon SYS:Trashcan'
  611. CALL Do_and_Log
  612.  
  613. RETURN
  614.  
  615. /* ------------------------------------------------------- */
  616. TM_Dock:
  617.  
  618.  Msg="u1_Test_Dock"
  619.  Parameter1 = InstApp
  620.  CALL ShowMessage
  621.  
  622.  IF (Action = 0) THEN CALL ExitMe
  623.  
  624.  CALL QuitCommodities
  625.  TM_wasActive = TM_active
  626.  RK_wasActive = RK_active
  627.  
  628.  TM_Cmd = CommodityPath('ToolManager')
  629.  RK_cmd = CommodityPath('ReKeyIt')
  630.  
  631.  ADDRESS COMMAND
  632.  copy 'ENV:ToolManager.prefs ENV:ToolManager.prefs.bak CLONE QUIET'
  633.  copy RootPath'ExampleConfigs/'Language'/ToolManager.prefs ENV:ToolManager.prefs CLONE QUIET'
  634.  copy 'S:RekeyIt.menus S:RekeyIt.menus.bak CLONE QUIET'
  635.  copy RootPath'ExampleConfigs/'Language'/RekeyIt.menus S:RekeyIt.menus CLONE QUIET'
  636.  assign 'DOCK: 'RootPath'SYS/Inst_TM/Prefs/Dock ADD'
  637.  TM_Cmd
  638.  wait' 4'
  639.  'MARInA_bin:WBrun 'RootPath'SYS/Inst_TM/WBstartup/RekeyIt'
  640.  
  641.  /* --------------------------------------- */
  642.  
  643.  Msg="v1_InfoFileManager"
  644.  Parameter1 = AppName
  645.  CALL ShowMessage
  646.  
  647.  Msg="v2_InfoFileManager"
  648.  Parameter1 = AppName
  649.  CALL ShowMessage
  650.  
  651.  Msg="v3_InfoFileManager"
  652.  Parameter1 = AppName
  653.  CALL ShowMessage
  654.  
  655.  Msg="v4_InfoFileManager"
  656.  Parameter1 = AppName
  657.  CALL ShowMessage
  658.  
  659.  Msg="u2_Take_Dock"
  660.  Parameter1 = AppName
  661.  CALL ShowMessage
  662.  
  663.  IF (Action = 0) THEN
  664.      CALL ExitMe
  665.  
  666.  IF (Action = 2) THEN  /* Remove Test-Installation */
  667.   DO
  668.     IF EXISTS('ENV:ToolManager.prefs.bak') THEN
  669.      DO
  670.        CALL QuitCommodities
  671.  
  672.        ADDRESS COMMAND
  673.        move' ENV:ToolManager.prefs.bak ENV:ToolManager.prefs CLONE QUIET'
  674.        move' S:RekeyIt.menus.bak S:RekeyIt.menus CLONE QUIET'
  675.      END
  676.  
  677.     IF (TM_wasActive = 1) THEN
  678.      DO
  679.        ADDRESS COMMAND
  680.           TM_Cmd
  681.           'wait 5'
  682.      END
  683.  
  684.     IF (RK_wasActive = 1) THEN ADDRESS COMMAND RK_Cmd
  685.  
  686.     CALL RemoveTempAssigns
  687.     RETURN
  688.   END
  689.  
  690.  
  691.   /* Install for real */
  692.  
  693.   CALL RemoveTempAssigns
  694.   CALL QuitCommodities
  695.  
  696.   IF EXISTS('ENVARC:ToolManager.prefs') THEN
  697.    DO
  698.       Command.1=move' ENVARC:ToolManager.prefs ENVARC:ToolManager.prefs.bak QUIET'
  699.       Command.2='wait 2'
  700.       CALL Do_and_Log
  701.    END
  702.  
  703.   InstName = ' ToolManager '
  704.   SourceDir=RootPath'SYS/Inst_TM'
  705.   DestDir1='SYS:'
  706.   DoCheck=1
  707.   CALL CopyAction
  708.  
  709.   Command.1=copy' /ExampleConfigs/'Language'/ToolManager.prefs ENVARC: CLONE QUIET'
  710.   Command.2=copy' /ExampleConfigs/'Language'/ToolManager.prefs ENV: CLONE QUIET'
  711.   Command.3=assign' Dock: SYS:Prefs/Dock ADD'
  712.   Command.4=TM_cmd
  713.   Command.5=wait' 4'
  714.   Command.6='MARInA_bin:WBrun SYS:WBstartup/ReKeyIt'
  715.   CALL Do_and_Log
  716.  
  717. RETURN
  718.  
  719. /* --------------- */
  720. QuitCommodities:
  721.  
  722.  ADDRESS COMMAND
  723.  'MARInA_bin:CLIexchange >ENV:TM_info ToolManager INFO'
  724.  'MARInA_bin:CLIexchange >ENV:RK_info ReKeyIt INFO'
  725.  
  726.  IF (LEFT(MyGetENV('TM_info'),11)='ToolManager') THEN
  727.  DO
  728.    ADDRESS COMMAND 'MARInA_bin:CLIexchange ToolManager KILL'
  729.  
  730.    TM_active = 1
  731.  END
  732.  
  733.  IF (LEFT(MyGetENV('RK_info'),7)='ReKeyIt') THEN
  734.  DO
  735.    ADDRESS COMMAND 'MARInA_bin:CLIexchange ReKeyIt KILL'
  736.  
  737.    RK_active = 1
  738.  
  739.    IF RealLanguage='deutsch' THEN
  740.     DO
  741.       ADDRESS COMMAND
  742.       'MARInA_bin:SWindow >NIL: "Nachricht von ReKeyIt" 100 100 p p'
  743.       'MARInA_bin:SWindow >NIL: "Nachricht von ReKeyIt" f'
  744.     END
  745.    ELSE
  746.     DO
  747.       IF RealLanguage='français' THEN
  748.        DO
  749.          ADDRESS COMMAND
  750.          'MARInA_bin:SWindow >NIL: "Message de ReKeyIt" 100 100 p p'
  751.          'MARInA_bin:SWindow >NIL: "Message de ReKeyIt" f'
  752.        END
  753.       ELSE
  754.        DO
  755.          ADDRESS COMMAND
  756.          'MARInA_bin:SWindow >NIL: "Message from ReKeyIt" 100 100 p p'
  757.          'MARInA_bin:SWindow >NIL: "Message from ReKeyIt" f'
  758.        END
  759.     END
  760.  
  761.    ADDRESS COMMAND wait' 5'
  762.  END
  763.  
  764.  
  765. RETURN
  766.  
  767. /* --------------- */
  768. CommodityPath:
  769.  PARSE ARG cdity
  770.  
  771.  Cmd = ''
  772.  
  773.  IF ~(RK_WasActive=1) THEN Cmd='dummy'
  774.  
  775.  IF EXISTS('SYS:WBstartup/'cdity) THEN
  776.     Cmd = 'MARInA_bin:WBrun SYS:WBstartup/'cdity
  777.  
  778.  IF EXISTS('SYS:Commodities/'cdity) THEN
  779.     Cmd = 'MARInA_bin:WBrun SYS:Commodities/'cdity
  780.  
  781.  IF EXISTS('SYS:Commods/'cdity) THEN
  782.     Cmd = 'MARInA_bin:WBrun SYS:Commods/'cdity
  783.  
  784.  IF EXISTS('SYS:Cdity/'cdity) THEN
  785.     Cmd = 'MARInA_bin:WBrun SYS:Cdity/'cdity
  786.  
  787.  IF EXISTS('SYS:Tools/Commodities/'cdity) THEN
  788.     Cmd = 'MARInA_bin:WBrun SYS:Tools/Commodities/'cdity
  789.  
  790.  IF EXISTS('SYS:Tools/Commods/'cdity) THEN
  791.     Cmd = 'MARInA_bin:WBrun SYS:Tools/Commods/'cdity
  792.  
  793.  IF EXISTS('SYS:Tools/Cdity/'cdity) THEN
  794.     Cmd = 'MARInA_bin:WBrun SYS:Tools/Cdity/'cdity
  795.  
  796.  IF EXISTS('SYS:Tools/'cdity) THEN
  797.     Cmd = 'MARInA_bin:WBrun SYS:Tools/'cdity
  798.  
  799.  IF EXISTS('SYS:Utilities/'cdity) THEN
  800.     Cmd = 'MARInA_bin:WBrun SYS:Utilities/'cdity
  801.  
  802.  IF EXISTS('SYS:WBstartup+/'cdity) THEN
  803.     Cmd = 'MARInA_bin:WBrun SYS:WBstartup+/'cdity
  804.  
  805.  IF EXISTS('SYS:System/'cdity) THEN
  806.     Cmd = 'MARInA_bin:WBrun SYS:System/'cdity
  807.  
  808.  IF EXISTS('SYS:c/'cdity) THEN
  809.     Cmd = 'MARInA_bin:WBrun SYS:c/'cdity
  810.  
  811.  IF (Cmd='' & cdity='ToolManager') THEN
  812.   DO
  813.     Msg="u0_ToolManagerPath"
  814.     Parameter1=cdity
  815.     ActualPath="SYS:WBstartup"
  816.     ActualName=cdity
  817.     CALL ShowMessage
  818.  
  819.     Cmd=SelectedFile
  820.   END
  821.  
  822. RETURN Cmd
  823.  
  824. /* --------------- */
  825. RemoveTempAssigns:
  826.  
  827.  ADDRESS COMMAND
  828.  assign' DOCK: 'RootPath'SYS/Inst_TM/Prefs/Dock REMOVE'
  829.  
  830. RETURN
  831.  
  832.  
  833. /* ------------ BEGIN  Standard MARInA Installer --------------- */
  834.  
  835. Init:
  836.  
  837. AppName = "© TNE) 98 MARInA Installer"
  838.  
  839. CR = '0a'x
  840.  
  841. IF ~show('L','rexxreqtools.library') THEN
  842.     r=ADDLIB('rexxreqtools.library',0,-30,0)
  843.  
  844. IF ~show('L','rexxsupport.library') THEN
  845.     r=ADDLIB('rexxsupport.library',0,-30,0)
  846.  
  847. ProcessNumber=PRAGMA('ID')
  848.  
  849. CALL FORBID
  850.  
  851. Intui  = showlist(l, 'intuition.library',, a)
  852. Screen = next(intui, 56)
  853. Font   = next(screen, 136)
  854. FontSize = c2d(import(offset(font, 20), 2))
  855.  
  856. CALL PERMIT
  857.  
  858. MaxTitleChars = 60
  859.  
  860. ReqLE = 70  /* Main Window */
  861. ReqTE = 80
  862.  
  863. ConsoleType = 'CON:'
  864. ConsoleSize = ReqLE'/'ReqTE'/600/200'
  865.  
  866. ReqHeight = 350
  867.  
  868. rt_TE1 = ReqTE + FontSize + 4  /* Requester-Windows */
  869. rt_LE1 = ReqLE + 6
  870.  
  871. PosTags = "rt_reqpos=reqpos_topleftscr rt_leftoffset=" ReqLE " rt_topoffset=" ReqTE
  872. EZtags = PosTags
  873. GLtags = PosTags || "rtgl_min=0 rtgl_max=1500 rtgl_backfill=true "
  874. GStags = PosTags || " rtgs_backfill=false rtgs_width=300"
  875.  
  876. POINTER_TAGS = "rt_reqpos=reqpos_pointer"
  877. DIR_TAGS = PosTags || " rtfi_flags=freqf_nofiles|freqf_save rtfi_height=" ReqHeight
  878. FILE_TAGS = PosTags || " rtfi_flags=freqf_multiselect|freqf_selectdirs" || " rtfi_height=" ReqHeight
  879. ONEFILE_TAG = PosTags || " rtfi_height=" ReqHeight
  880.  
  881. Console = '>"'ConsoleType || ConsoleSize'/'AppName' Messages.../AUTO/NOClose"'
  882.  
  883. /*---- specials -------------------*/
  884.  
  885. EditList = 'T:MARInA_Edit_Configs'
  886.  
  887. CurrentDir = MyGetENV('ACTUALINSTALL')
  888. r=PRAGMA('DIRECTORY', CurrentDir)
  889.  
  890. Pos=POS('Install-Guide', CurrentDir)
  891. RootPath=LEFT(CurrentDir,Pos-1)
  892.  
  893. ADDRESS COMMAND RootPath'Install-Guide/c/assign Install_C: 'RootPath'Install-Guide/c'
  894.  
  895. CALL GetLanguage
  896.  
  897. Additional_S = ''
  898. Additional_C = ''
  899. Additional_L = ''
  900. Additional_Libs = ''
  901. Additional_Devs = ''
  902. Additional_Fonts = ''
  903. Additional_Locale = ''
  904. Additional_Help = ''
  905.  
  906. ItemNr = 0
  907. InstName = InstApp
  908. InstAssign = ''
  909. InstDest2 = ''
  910. CopyMsg2 = ''
  911. DestDir2 = ''
  912. Recursive = 'ALL'
  913. DoNotRemoveDir = 0
  914. PhaseA_exists = 0
  915.  
  916. assign='Install_C:assign'
  917. copy='Install_C:copy'
  918. delete='Install_C:delete'
  919. execute='Install_C:execute'
  920. list='Install_C:list'
  921. makedir='Install_C:makedir'
  922. move='Install_C:move'
  923. wait='Install_C:wait'
  924.  
  925. CheckSourceFile = 'T:CS_FileList_'ProcessNumber
  926. CheckSourceDirs = 'T:CS_DirsList_'ProcessNumber
  927. TempPath = 'CS_Dest-path'ProcessNumber
  928.  
  929. RETURN
  930.  
  931.  
  932. /* ------------------------------------------------------- */
  933. Copy_SrcDest:
  934.  
  935.  Msg=MsgSrcDest
  936.  Parameter1 = AppName
  937.  CALL ShowMessage
  938.  
  939.  IF (RIGHT(InstDest1,1)=':') THEN
  940.     InstDest1_Dir=InstDest1
  941.  ELSE
  942.     InstDest1_Dir=InstDest1'/'
  943.  
  944.  IF (RIGHT(InstDest2,1)=':') THEN
  945.     InstDest2_Dir=InstDest2
  946.  ELSE
  947.     InstDest2_Dir=InstDest2'/'
  948.  
  949.  
  950.  IF (Action=1) THEN
  951.  DO
  952.      Selected_Dest = InstDest1
  953.      Selected_Dest_Dir = InstDest1_Dir
  954.  END
  955.  
  956.  IF (Action=2) THEN
  957.   DO FOREVER
  958.  
  959.      Msg = '_PathReq'     /* GetPath */
  960.      Parameter1 = AppName
  961.      Parameter2 = InstName
  962.      ActualPath = 'SYS:'
  963.      CALL ShowMessage
  964.  
  965.      Selected_Dest_Dir = SelectedPath
  966.      IF (Selected_Dest_Dir = "") THEN
  967.          Selected_Dest_Dir = InstDest1_Dir
  968.  
  969.      Selected_Dest = STRIP(Selected_Dest_Dir, 'T', '/')
  970.  
  971.      Msg=MsgOtherDir
  972.      Parameter1 = AppName
  973.      Parameter2 = Selected_Dest
  974.      CALL ShowMessage
  975.  
  976.      IF (Action=1) THEN LEAVE
  977.  
  978.      IF (Action=0) THEN CALL ExitMe
  979.   END
  980.  
  981.  IF (Action=0) THEN CALL ExitMe
  982.  
  983.  
  984.  SourceDir = InstSource
  985.  DestDir1 = Selected_Dest
  986.  
  987.  IF ~(InstDest2 = '') THEN
  988.   DO
  989.      IF (UPPER(Selected_Dest) = UPPER(InstDest1)) THEN
  990.          DestDir2 = InstDest2
  991.   END
  992.  
  993.  CALL CopyAction
  994.  
  995.  
  996.  CopyMsg2 = ''
  997.  InstDest2 = ''
  998.  InstDest2_Dir = ''
  999.  
  1000.  RETURN
  1001.  
  1002.  
  1003. /* ---------------------------- */
  1004.  
  1005. CopyAction:
  1006.  
  1007.  IF (RIGHT(DestDir1,1)=':' | RIGHT(DestDir1,1)='/') THEN
  1008.     DestDir1_Dir=DestDir1
  1009.  ELSE
  1010.     DestDir1_Dir=DestDir1'/'
  1011.  
  1012.  IF (RIGHT(DestDir2,1)=':' | RIGHT(DestDir2,1)='/') THEN
  1013.     DestDir2_Dir=DestDir2
  1014.  ELSE
  1015.     DestDir2_Dir=DestDir2'/'
  1016.  
  1017.  IF (DoCheck=1) THEN
  1018.   DO
  1019.     DestDir = DestDir1_Dir
  1020.     CALL CopySecure
  1021.  
  1022.     r=PRAGMA('DIRECTORY', CurrentDir)
  1023.  
  1024.     IF ~(DestDir2 = '') THEN
  1025.     DO
  1026.        DestDir = DestDir2_Dir
  1027.        CALL CopySecure
  1028.     END
  1029.  
  1030.     r=PRAGMA('DIRECTORY', CurrentDir)
  1031.     DoCheck=0
  1032.   END
  1033.  ELSE
  1034.   DO
  1035.     Console = '>"'ConsoleType''ConsoleSize'/'AppName' Messages...  copying to 'DestDir1'/AUTO/NOClose"'
  1036.     Command.1 = copy Console SourceDir '"'DestDir1'" CLONE 'Recursive
  1037.  
  1038.     IF ~(DestDir2 = '') THEN
  1039.     DO
  1040.        Console = '>"'ConsoleType''ConsoleSize'/'AppName' Messages...  copying to 'DestDir2'/AUTO/NOClose"'
  1041.        Command.2 = copy Console SourceDir '"'DestDir2'" CLONE 'Recursive
  1042.     END
  1043.  
  1044.     CALL Do_and_Log
  1045.  
  1046.     IF (ResultCommand = 10) THEN
  1047.     DO
  1048.        DestFull=1
  1049.        CALL ExitMe
  1050.     END
  1051.   END
  1052.  
  1053.  
  1054.  IF ~(InstAssign = '') THEN
  1055.   DO
  1056.     Command.1 = assign' 'InstAssign' 'DestDir1' ADD'
  1057.     CALL Do_and_Log
  1058.  
  1059.     IF (UPPER(InstAssign)='S:') THEN Additional_S = DestDir1
  1060.  
  1061.     IF (UPPER(InstAssign)='C:') THEN Additional_C = DestDir1
  1062.  
  1063.     IF (UPPER(InstAssign)='L:') THEN Additional_L = DestDir1
  1064.  
  1065.     IF (UPPER(InstAssign)='LIBS:') THEN Additional_Libs = DestDir1
  1066.  
  1067.     IF (UPPER(InstAssign)='DEVS:') THEN Additional_Devs = DestDir1
  1068.  
  1069.     IF (UPPER(InstAssign)='FONTS:') THEN Additional_Fonts = DestDir1
  1070.  
  1071.     IF (UPPER(InstAssign)='LOCALE:') THEN Additional_Locale = DestDir1
  1072.  
  1073.     IF (UPPER(InstAssign)='HELP:') THEN Additional_Help = DestDir1
  1074.   END
  1075.  
  1076.  
  1077.  /* -----Undo_copy:------- */
  1078.  
  1079.  
  1080.  ItemNr = ItemNr + 1
  1081.  DeInstallScript = UnInstDir'/'UnInstScrName'.'ItemNr
  1082.  
  1083.  
  1084.  r=PRAGMA('DIRECTORY', SourceDir)
  1085.  
  1086.  ADDRESS COMMAND
  1087.      'echo >'DeInstallScript' "failat 30"'
  1088.      'list >>'DeInstallScript' FILES 'Recursive' LFORMAT "delete 'DestDir1_Dir'%s%s"'
  1089.  
  1090.  IF ~(DestDir2 = '') THEN
  1091.   DO
  1092.      ADDRESS COMMAND
  1093.          'list >>'DeInstallScript' FILES 'Recursive' LFORMAT "delete 'DestDir2_Dir'%s%s"'
  1094.   END
  1095.  
  1096.  r=PRAGMA('DIRECTORY', CurrentDir)
  1097.  
  1098.  
  1099.  DeInstallScript = 'T:'UnInstScrName'.'ItemNr
  1100.  
  1101.  r=WLine('if exists "'DestDir1'"')
  1102.  r=WLine(' ask " Remove 'InstName'-Files in Directory 'DestDir1' ?  [y/n]"')
  1103.  r=WLine(' if warn')
  1104.  r=WLine('  execute 'DeInstallScript)
  1105.  r=WLine('  delete 'DeInstallScript' QUIET')
  1106.  r=WLine(' endif')
  1107.  r=WLine('endif')
  1108.  CALL SpaceNextEntry
  1109.  
  1110.  IF (DoNotRemoveDir = 0) THEN
  1111.  DO
  1112.   r=UPPER(DestDir1)
  1113.   IF ~(r='WORK:' | r='SYS:' | r='SYS:PREFS' | r='SYS:TOOLS' | r='SYS:UTILITIES' | r='ENVARC:' | r='SYS:C' | r='SYS:LIBS' | r='ENV:' | r='C:' | r='S:' | r='L:' | r='FONTS:' | r='LIBS:' | LEFT(r,5)='DEVS:' | LEFT(r,7)='LOCALE:' | LEFT(r,5)='HELP:') THEN
  1114.   DO
  1115.    r=WLine('if exists "'DestDir1'"')
  1116.    r=WLine(' ask " Remove the whole Directory 'DestDir1' ?  [y/n]"')
  1117.    r=WLine(' if warn')
  1118.  
  1119.    IF ~(InstAssign = '') THEN
  1120.    DO
  1121.      r=WLine('   path 'DestDir1' REMOVE')
  1122.      r=WLine('   path 'InstAssign' REMOVE')
  1123.      r=WLine('   path 'InstAssign' REMOVE')
  1124.  
  1125.      u=UPPER(InstAssign)
  1126.      IF ~(u = "S:" | u = "C:" | u = "L:" | u = "LIBS:" | u = "DEVS:" u = "FONTS:" | u = "LOCALE:" | u = "HELP:" | u = "SYS:") THEN
  1127.          r=WLine('   assign 'InstAssign' REMOVE')
  1128.  
  1129.      IF (u = "S:") THEN
  1130.          r=WLine('   assign 'InstAssign' 'Additional_S' REMOVE')
  1131.  
  1132.      IF (u = "C:") THEN
  1133.          r=WLine('   assign 'InstAssign' 'Additional_C' REMOVE')
  1134.  
  1135.      IF (u = "L:") THEN
  1136.          r=WLine('   assign 'InstAssign' 'Additional_L' REMOVE')
  1137.  
  1138.      IF (u = "LIBS:") THEN
  1139.          r=WLine('   assign 'InstAssign' 'Additional_Libs' REMOVE')
  1140.  
  1141.      IF (u = "DEVS:") THEN
  1142.          r=WLine('   assign 'InstAssign' 'Additional_Devs' REMOVE')
  1143.  
  1144.      IF (u = "FONTS:") THEN
  1145.          r=WLine('   assign 'InstAssign' 'Additional_Fonts' REMOVE')
  1146.  
  1147.      IF (u = "LOCALE:") THEN
  1148.          r=WLine('   assign 'InstAssign' 'Additional_Locale' REMOVE')
  1149.  
  1150.      IF (u = "HELP:") THEN
  1151.          r=WLine('   assign 'InstAssign' 'Additional_Help' REMOVE')
  1152.  
  1153.    END
  1154.  
  1155.    r=WLine('   wait 1')
  1156.    r=WLine('   delete "'DestDir1'" ALL FORCE')
  1157.  
  1158.    IF ~(DestDir2 = '') THEN
  1159.       r=WLine('   delete "'DestDir2'" ALL FORCE')
  1160.  
  1161.    r=WLine(' endif')
  1162.    r=WLine('endif')
  1163.    CALL SpaceNextEntry
  1164.   END
  1165.  END
  1166.  
  1167.  InstAssign = ''
  1168.  DestDir2 = ''
  1169.  DestDir2_Dir = ''
  1170.  Recursive = 'ALL'
  1171.  InstName = InstApp
  1172.  DoNotRemoveDir = 0
  1173.  
  1174. RETURN
  1175.  
  1176. /* --------------------------------------CopySecure------- */
  1177. CopySecure:
  1178.  
  1179.  ShowConsole = ConsoleType''ReqLE'/'ReqTE'/584/124/'AppName' Messages...  copying to 'DestDir'/NOCLOSE'
  1180.  IF ~(Open(Con, ShowConsole, 'write')) THEN
  1181.   DO
  1182.      MsgFile = ThisConsole
  1183.      CALL Err_ShowMessage
  1184.   END
  1185.  
  1186.  r = writeln(Con, " ")
  1187.  r = writeln(Con, " Please wait, Searching duplicate files and copying is in action.")
  1188.  r = writeln(Con, " ")
  1189.  r = writeln(Con, " Source Folder: "SourceDir)
  1190.  r = writeln(Con, " Destin Folder: "DestDir)
  1191.  
  1192.  Files.count = 1
  1193.  Files.1 = SourceDir
  1194.  CALL FileParser
  1195.  
  1196.  FileOp = copy
  1197.  FileOpOpts = 'CLONE 'Recursive
  1198.  
  1199.  k=1
  1200.  DoIt = 1
  1201.  IconExists = 0
  1202.  
  1203.  IF ~(RIGHT(Files.1,1)=':') THEN Files.1=Files.1'/'
  1204.  
  1205.  CALL CheckSource
  1206.  
  1207.  MainDestDir = DestDir
  1208.  MainDirLength = LENGTH(Files.k)
  1209.  
  1210.  theDir=strip(MainDestDir,'T','/')
  1211.  IF (IsDir(theDir) = -1) THEN ADDRESS COMMAND 'makedir "'theDir'"'
  1212.  
  1213.  /* Create Destination Sub-Directories */
  1214.  
  1215.  IF (DirCount > 0) THEN
  1216.   DO SubCount = 1 to DirCount
  1217.      ThisDestDir = MainDestDir || RIGHT(SourceDir.SubCount, LENGTH(SourceDir.SubCount)-MainDirLength)
  1218.      MakeDestDir = Strip(ThisDestDir, 'T', '/')
  1219.  
  1220.      IF (IsDir(MakeDestDir) = -1) THEN ADDRESS COMMAND 'makedir' MakeDestDir
  1221.   END
  1222.  
  1223.  IF (SourceCount > 0) THEN
  1224.   DO SubCount = 1 to SourceCount
  1225.      ActualFile = SourceDirs.SubCount || SourceFiles.SubCount
  1226.      Target = MainDestDir || RIGHT(SourceDirs.SubCount, LENGTH(SourceDirs.SubCount)-MainDirLength) || SourceFiles.SubCount
  1227.  
  1228.      IF ~(DoIt=3) THEN CALL CheckExist
  1229.      IF (DoIt=1 | DoIt=3) THEN CALL DoCopy
  1230.      IF (DoIt=0) THEN LEAVE
  1231.   END
  1232.  
  1233.  r = Close(Con)
  1234.  
  1235.  RETURN
  1236.  
  1237. /* ----------------------------- */
  1238. DoCopy:
  1239.  
  1240.  ADDRESS COMMAND FileOp '"'ActualFile'" "'Target'" 'FileOpOpts
  1241.  
  1242.  Code=RC
  1243.  
  1244.  IF (Code=5) THEN
  1245.  DO
  1246.    Msg = '_CopyFull'
  1247.    Parameter1 = AppName
  1248.    Parameter2 = Target
  1249.    CALL ShowMessage
  1250.  
  1251.    IF (Action=1) THEN
  1252.     DO
  1253.        ADDRESS COMMAND
  1254.            'protect "'Target'" +wd'
  1255.            FileOp '"'ActualFile'" "'Target'" 'FileOpOpts
  1256.     END
  1257.  
  1258.    Code=RC
  1259.  END
  1260.  
  1261.  IF (Code=10) THEN
  1262.  DO
  1263.      DestFull=1
  1264.      CALL ExitMe
  1265.  END
  1266.  
  1267. RETURN
  1268.  
  1269. /* ----------------------------- */
  1270. CheckSource:
  1271.  
  1272.  Source_is_Dir = 0   /* Preset */
  1273.  SourceCount = Files.count - k
  1274.  SubCount = 0
  1275.  
  1276.  IF (IsDir(Files.k) = 1) THEN
  1277.  DO
  1278.    Source_is_Dir = 1
  1279.  
  1280.    ADDRESS COMMAND
  1281.    'list 'Files.k' >'CheckSourceDirs' ALL DIRS LFORMAT="%p%s"'
  1282.    'list 'Files.k' >'CheckSourceFile' ALL FILES LFORMAT="%p*n%s"'
  1283.  
  1284.    SourceCount = 1
  1285.    IF (Open(fTmp, CheckSourceFile, 'read')) THEN
  1286.    DO
  1287.      DO UNTIL (EOF(fTmp))
  1288.       SourceDirs.SourceCount = ReadLn(fTmp)
  1289.       SourceFiles.SourceCount = ReadLn(fTmp)
  1290.       SourceCount = SourceCount + 1
  1291.      END
  1292.  
  1293.      SourceCount = SourceCount - 2  /* 2 Lines Overhead in each "list" File */
  1294.  
  1295.      r=Close(fTmp)
  1296.      ADDRESS COMMAND delete CheckSourceFile 'QUIET'
  1297.    END
  1298.  
  1299.    IF (Open(fTmp, CheckSourceDirs, 'read')) THEN
  1300.    DO
  1301.      DirCount = 1
  1302.      DO UNTIL (EOF(fTmp))
  1303.       SourceDir.DirCount = ReadLn(fTmp)
  1304.       DirCount = DirCount + 1
  1305.      END
  1306.  
  1307.      DirCount = DirCount - 2  /* 2 Lines Overhead in each "list" File */
  1308.  
  1309.      r=Close(fTmp)
  1310.      ADDRESS COMMAND delete CheckSourceDirs 'QUIET'
  1311.    END
  1312.   END
  1313.  
  1314.  RETURN
  1315.  
  1316. /* ----------------------------- */
  1317. CheckExist:
  1318.  
  1319.  DoIt = 1          /* Preset */
  1320.  
  1321.  IF (Files.count > 1 | Source_is_Dir = 1) then
  1322.      MsgOffset = 3
  1323.  ELSE
  1324.      MsgOffset = 0
  1325.  
  1326.  IF (EXISTS(Target) & EXISTS(ActualFile)) THEN
  1327.  DO
  1328.    sz_AttrSource = GetFileAttributes(ActualFile)
  1329.    sz_AttrDest = GetFileAttributes(Target)
  1330.  
  1331.    Rest = SourceCount-SubCount
  1332.  
  1333.    IF (Rest > 1) THEN MsgNr = 2 + MsgOffset
  1334.  
  1335.    IF (Rest = 1) THEN MsgNr = 3 + MsgOffset
  1336.  
  1337.    IF (Rest = 0) THEN MsgNr = 4 + MsgOffset
  1338.  
  1339.    Msg = "_CopyReplace."MsgNr
  1340.    Parameter1 = sz_AttrDest
  1341.    Parameter2 = sz_AttrSource
  1342.    Parameter3 = Rest
  1343.    Parameter4 = k
  1344.    Parameter5 = Files.count
  1345.    Parameter6 = AppName
  1346.  
  1347.    CALL ShowMessage
  1348.    DoIt = Action
  1349.  END
  1350.  
  1351.  RETURN
  1352.  
  1353. /* ----------------------------- */
  1354. GetFileAttributes:
  1355. PARSE ARG CheckedFile
  1356.  
  1357.   BytesTemp = 'ENV:FM_Bytes'ProcessNumber
  1358.   AttrFile = 'T:FM_Attr_'ProcessNumber
  1359.  
  1360.   ADDRESS COMMAND 
  1361.   'list >'AttrFile' "'CheckedFile'" LFORMAT "    %n*n    %l Bytes*n    %p*n    %d   %t*n    %c"'
  1362.   'echo >>'AttrFile' "    Version:        " NOLINE'
  1363.  
  1364.   IsExecutable = CheckExecutable(CheckedFile)
  1365.  
  1366.   ADDRESS COMMAND
  1367.       'list >'BytesTemp' "'CheckedFile'" LFORMAT "%l"'
  1368.  
  1369.   IF (Open(fTmp, BytesTemp, 'read')) THEN
  1370.    DO
  1371.       Bytes = VALUE(ReadLn(fTmp))
  1372.       r=Close(fTmp)
  1373.    END
  1374.  
  1375.   IF ((IsExecutable & Bytes < 800000)) THEN
  1376.    DO
  1377.       ADDRESS COMMAND
  1378.           'version >>'AttrFile' "'CheckedFile'"'
  1379.    END
  1380.  
  1381.   IF (Open(fTmp, AttrFile, 'read')) THEN
  1382.   DO
  1383.      sz_Attr = ReadLn(fTmp)
  1384.      sz_Attr = sz_Attr || CR || ReadLn(fTmp)
  1385.      sz_Attr = sz_Attr || CR || LEFT(ReadLn(fTmp), 85)
  1386.      sz_Attr = sz_Attr || CR || ReadLn(fTmp)
  1387.      sz_Attr = sz_Attr || CR || LEFT(ReadLn(fTmp), 85)
  1388.  
  1389.      IF ((IsExecutable & Bytes < 800000) | Bytes < 100000) THEN
  1390.       DO
  1391.        Version = LEFT(ReadLn(fTmp), 70)
  1392.        IF ~(LEFT(Version, 34) = "    Version:        Could not find") THEN
  1393.            sz_Attr = sz_Attr || CR || Version
  1394.       END
  1395.  
  1396.      r=Close(fTmp)
  1397.   END
  1398.  
  1399.   ADDRESS COMMAND
  1400.       delete AttrFile 'QUIET'
  1401.       delete BytesTemp 'QUIET'
  1402.  
  1403. RETURN sz_Attr
  1404.  
  1405. /*----------------------------------------*/
  1406. CheckExecutable:
  1407. PARSE ARG CheckExeFile
  1408.  
  1409.  Flag = 0
  1410.  
  1411.  IF (Open(fTmp, CheckExeFile, 'read')) THEN
  1412.  DO
  1413.   Head = ReadCh(fTmp, 4)
  1414.   HeaderBytes = c2x(Head)
  1415.   r=Close(fTmp)
  1416.  END
  1417.  
  1418.  IF (HeaderBytes = "000003F3") THEN     /* Executable */
  1419.     Flag = 1
  1420.  
  1421. RETURN Flag
  1422.  
  1423. /*------------------------------------IsDir--------*/
  1424. IsDir:     PROCEDURE
  1425. PARSE ARG name
  1426.  
  1427.  name = strip(name, 'T', '/')
  1428.  
  1429.  returned = PRAGMA('DIRECTORY', name)
  1430.  
  1431.  IF ~(returned = "") THEN
  1432.      DirFlag = 1
  1433.  ELSE
  1434.   DO
  1435.    IF ~Exists(name) then
  1436.      DirFlag = -1
  1437.    ELSE
  1438.      DirFlag = 0
  1439.   END
  1440.  
  1441.  RETURN DirFlag
  1442.  
  1443. /*----------------------------------FileParser--------*/
  1444. FILEPARSER:
  1445.  
  1446.  PrognameBegPos = 0
  1447.  DevicePos = 0
  1448.  DirPos = 0
  1449.  SfxBegin = 0
  1450.  
  1451.  i=1
  1452.  CALL Analyze
  1453.  
  1454.  i=Files.count  /* set last path to Actual path */
  1455.  Path = Path.i
  1456.  
  1457. RETURN
  1458.  
  1459. /*----------------------------------------*/
  1460. Analyze:
  1461.  
  1462.  Laenge = LENGTH(Files.i)
  1463.  DevicePos=LASTPOS(':',Files.i)
  1464.  DirPos=LASTPOS('/',Files.i)
  1465.  
  1466.  IF(DirPos > 1) THEN
  1467.   DO
  1468.     PrognameBegPos=DirPos
  1469.     Path1 = LEFT(Files.i, DirPos)
  1470.     Path.i = strip(Path1, T, '/')
  1471.   END
  1472.  ELSE
  1473.   DO
  1474.     PrognameBegPos=DevicePos
  1475.     Path.i = LEFT(Files.i, DevicePos)
  1476.   END
  1477.  
  1478.  Numchars = Laenge - PrognameBegPos
  1479.  Device.i = LEFT(Files.i, Devicepos)
  1480.  FileName.i = RIGHT(Files.i, Laenge-PrognameBegPos)
  1481.  
  1482.  SfxBegin = LASTPOS('.',FileName.i)
  1483.  
  1484.  IF (SfxBegin=0) THEN
  1485.   DO
  1486.       Prefix.i = FileName.i
  1487.       Suffix.i = ""
  1488.   END
  1489.  ELSE
  1490.   DO
  1491.       Prefix.i = LEFT(FileName.i,SfxBegin-1)
  1492.       Suffix.i = UPPER(RIGHT(Files.i, NumChars-SfxBegin))
  1493.   END
  1494.  
  1495. RETURN 1
  1496.  
  1497. /*----------------------------------------------------------------*/
  1498. EnhanceStartup:
  1499.  
  1500. /* Check s:startup-sequence for a complete ModAS-System, if so, RETURN */
  1501.  
  1502.  sseqModAS=0
  1503.  IF (Open(SSSCRIPT, 'S:Startup-Sequence', 'R')) THEN
  1504.   DO
  1505.     DO UNTIL EOF(SSSCRIPT)
  1506.  
  1507.      Line = ReadLn(SSSCRIPT)
  1508.      IF (LEFT(Line,12) = First12) THEN
  1509.         DO
  1510.           sseqModAS=1
  1511.           LEAVE
  1512.         END
  1513.     END
  1514.     r=Close(SSSCRIPT)
  1515.     IF (sseqModAS=1) THEN RETURN
  1516.   END
  1517.  
  1518.  Msg=Msg_Enhance1
  1519.  CALL ShowMessage
  1520.  
  1521.  IF (Action = 1) THEN
  1522.      StartupFile = 'S:User-Startup'
  1523.  
  1524.  IF (Action=0) THEN CALL ExitMe
  1525.  
  1526.  InstName = ' ModAS Startup '
  1527.  SourceDir=RootPath'SYS/Inst_Start'
  1528.  DestDir1='SYS:'
  1529.  CALL CopyAction
  1530.  
  1531.  r=WLine(' ')
  1532.  r=WLine(';Remove special things from ModAS:')
  1533.  r=WLine('if not exists SYS:StartSys/1_Residents')
  1534.  r=WLine(' delete SYS:StartSys ALL')
  1535.  r=WLine(' delete SYS:StartSys.info')
  1536.  r=WLine('endif')
  1537.  r=WLine(' ')
  1538.  CALL SpaceNextEntry
  1539.  
  1540.  NewStartup = StartupFile'_'
  1541.  IF ~Open(SSCRIPT, NewStartup, 'W') THEN Err_ShowMessage(NewStartup)
  1542.  
  1543.  IF (EXISTS(StartupFile)) THEN
  1544.  DO
  1545.   StartupExisted = 1
  1546.  
  1547.   IF (Open(OldSCRIPT, StartupFile, 'R')) THEN
  1548.      DO UNTIL EOF(OldSCRIPT)
  1549.  
  1550.          Line = ReadLn(OldSCRIPT)
  1551.          IF (LEFT(Line,12) = First12) THEN
  1552.             PhaseA_exists = 1
  1553.  
  1554.          r=SLine(Line)  /* read and put */
  1555.      END
  1556.  
  1557.   r=Close(OldScript)
  1558.  END
  1559.  
  1560.  IF (PhaseA_exists = 1) THEN
  1561.   DO
  1562.     r=Close(SSCRIPT)
  1563.     RETURN
  1564.   END
  1565.  
  1566.  
  1567.  IF ~Open(SModule, Module, 'R') THEN Err_ShowMessage(Module)
  1568.  
  1569.  n=0
  1570.  DO UNTIL EOF(SModule)
  1571.      Line = ReadLn(SModule)
  1572.      r=SLine(Line)
  1573.      n = n+1
  1574.  END
  1575.  r=Close(SModule)
  1576.  
  1577.  r=Close(SSCRIPT)
  1578.  
  1579.  ADDRESS COMMAND
  1580.  copy StartupFile StartupFile'.bak1'
  1581.  copy NewStartup StartupFile
  1582.  delete NewStartup 'QUIET'
  1583.  
  1584.  r=WriteLn(LOGFILE, 'Appended 'InstApp'-Section to 'StartupFile)
  1585.  CALL LogLine
  1586.  
  1587.  
  1588. /* Un_StartupScript:------- */
  1589.  
  1590.  ItemNr = ItemNr + 1
  1591.  DeInstallScript = UnInstDir'/'UnInstScrName'.'ItemNr
  1592.  IF ~Open(RexxSCRIPT, DeInstallScript, 'W') THEN Err_ShowMessage(DeInstallScript)
  1593.  
  1594.  r=RexxLine("/* Uninstaller for "StartupFile" entries of "InstApp"*/")
  1595.  r=RexxLine(" ")
  1596.  r=RexxLine("IF (Open(R_SCRIPT, '"NewStartup"', 'W')) THEN")
  1597.  r=RexxLine(" DO")
  1598.  r=RexxLine("  IF (Open(SCRIPT, '"StartupFile"', 'R')) THEN")
  1599.  r=RexxLine("   DO")
  1600.  r=RexxLine("     DO UNTIL EOF(SCRIPT)")
  1601.  r=RexxLine("        Line = ReadLn(SCRIPT)")
  1602.  r=RexxLine(" ")
  1603.  r=RexxLine("        IF (UPPER(LEFT(Line,12)) = '"UPPER(First12)"') THEN")
  1604.  r=RexxLine("         DO FOREVER")
  1605.  r=RexxLine("            r=ReadLn(SCRIPT)")
  1606.  r=RexxLine("            IF (UPPER(LEFT(r,12)) = '"UPPER(Last12)"') THEN")
  1607.  r=RexxLine("               LEAVE")
  1608.  r=RexxLine("         END")
  1609.  r=RexxLine("        ELSE")
  1610.  r=RexxLine("            r=WriteLn(R_SCRIPT, Line)  /* read and put */")
  1611.  r=RexxLine("     END")
  1612.  r=RexxLine("     r=Close(SCRIPT)")
  1613.  r=RexxLine("   END")
  1614.  r=RexxLine(" ")
  1615.  r=RexxLine("  r=Close(R_SCRIPT)")
  1616.  r=RexxLine(" END")
  1617.  r=RexxLine(" ")
  1618.  r=RexxLine(" ADDRESS COMMAND")
  1619.  r=RexxLine("    'copy "StartupFile" "StartupFile".bak2'")
  1620.  r=RexxLine("    'copy "NewStartup" "StartupFile"'")
  1621.  r=RexxLine("    'delete "NewStartup" QUIET'")
  1622.  r=RexxLine(" ")
  1623.  r=RexxLine(" EXIT 0")
  1624.  r=Close(RexxSCRIPT)
  1625.  
  1626.  r=WLine('ask " Restore the original Startup-File 'StartupFile' ? [y/n]"')
  1627.  r=WLine('if warn')
  1628.  r=WLine('  SYS:rexxc/rx 'DeInstallScript)
  1629.  r=WLine('endif')
  1630.  CALL SpaceNextEntry
  1631.  
  1632. RETURN
  1633.  
  1634.  
  1635. /* -------------- */
  1636. RexxLine:
  1637. PARSE ARG TheLine
  1638.  
  1639.  r=WriteLn(RexxSCRIPT, TheLine)
  1640.  RETURN 1
  1641.  
  1642. /*----------------------------------------------------------------*/
  1643. Create_InitScript:
  1644.  
  1645.  ADDRESS COMMAND delete Init_File 'QUIET'
  1646.  
  1647.  IF ~Open(SSCRIPT, Init_File, 'W') THEN Err_ShowMessage(Init_File)
  1648.  
  1649.  r=SLine('failat 21')
  1650.  
  1651.  IF ~(Additional_C = '') THEN
  1652.   DO
  1653.      n=n+1
  1654.      Command.n = assign' C: 'Additional_C' ADD'
  1655.   END
  1656.  
  1657.  IF ~(Additional_L = '') THEN
  1658.   DO
  1659.      n=n+1
  1660.      Command.n = assign' Libs: 'Additional_L' ADD'
  1661.   END
  1662.  
  1663.  IF ~(Additional_Libs = '') THEN
  1664.   DO
  1665.      n=n+1
  1666.      Command.n = assign' Libs: 'Additional_Libs' ADD'
  1667.   END
  1668.  
  1669.  IF ~(Additional_Devs = '') THEN
  1670.   DO
  1671.      n=n+1
  1672.      Command.n = assign' Devs: 'Additional_Devs' ADD'
  1673.   END
  1674.  
  1675.  IF ~(Additional_Fonts = '') THEN
  1676.   DO
  1677.      n=n+1
  1678.      Command.n = assign' Fonts: 'Additional_Fonts' ADD'
  1679.   END
  1680.  
  1681.  IF ~(Additional_Locale = '') THEN
  1682.   DO
  1683.      n=n+1
  1684.      Command.n = assign' Locale: 'Additional_Locale' ADD'
  1685.   END
  1686.  
  1687.  IF ~(Additional_Help = '') THEN
  1688.   DO
  1689.      n=n+1
  1690.      Command.n = assign' Locale: 'Additional_Help' ADD'
  1691.   END
  1692.  
  1693.  DO i=1 to n
  1694.      r=SLine(Command.i)
  1695.  END
  1696.  
  1697.  r=Close(SSCRIPT)
  1698.  
  1699.  CALL Do_and_Log
  1700.  
  1701.  r=WriteLn(LOGFILE, 'Created StartupScript 'Init_File)
  1702.  CALL LogLine
  1703.  
  1704.  r=WLine('if exists 'Init_File)
  1705.  r=WLine(' ask " Remove the Init-Script: 'Init_File' ?  [y/n] "')
  1706.  r=WLine(' if warn')
  1707.  r=WLine('   delete 'Init_File)
  1708.  r=WLine(' endif')
  1709.  r=WLine('endif')
  1710.  CALL SpaceNextEntry
  1711.  
  1712. RETURN
  1713.  
  1714.  
  1715. /* -------------- */
  1716. SLine:
  1717. PARSE ARG TheLine
  1718.  
  1719.     r=WriteLn(SSCRIPT, TheLine)
  1720.     RETURN 1
  1721.  
  1722. /* ----------------------------------------------- */
  1723. CopyHelp:
  1724.  
  1725.  Msg="p_manuals"
  1726.  Parameter1 = AppName
  1727.  CALL ShowMessage
  1728.  
  1729.  IF (Action=0) THEN CALL ExitMe
  1730.  
  1731.  IF (Action=1) THEN
  1732.  DO
  1733.      InstName = ' Online Help '
  1734.      SourceDir = RootPath'SYS/Inst_Help'
  1735.      DestDir1 = 'SYS:'
  1736.      DestDir1_Dir = 'SYS:'
  1737.      CALL CopyAction
  1738.  END
  1739.  
  1740.  CALL SpaceNextEntry
  1741.  
  1742.  RETURN
  1743.  
  1744.  
  1745. /* ------------ Rename .inf Icons to be viewn ----------- */
  1746. RenameIcons:
  1747.  
  1748.  ADDRESS COMMAND
  1749.  'echo >T:RenameInfos ";Rename .inf Files for 'InstModule'"'
  1750.  list' >>T:RenameInfos /#?.inf LFORMAT "'rename RootPath'%n 'RootPath'%no*n MARInA_bin:IconPos >NIL: 'RootPath'%no type=PROJECT*nendif"'
  1751.  execute' T:RenameInfos'
  1752.  delete' T:RenameInfos quiet'
  1753.  
  1754.  RETURN
  1755.  
  1756. /*-------------------------------------------------------*/
  1757. Create_UnInstallScript:
  1758.  
  1759.  Msg = '_UnInstaller'
  1760.  Parameter1 = AppName
  1761.  CALL ShowMessage
  1762.  
  1763.  UnInstDir = 'S:UnInstall'
  1764.  UnInstScrName = InstModule'_ex'
  1765.  
  1766.  IF ~EXISTS(UnInstDir) THEN ADDRESS COMMAND makedir UnInstDir
  1767.  
  1768.  UnInstStarter='UnInst_'InstModule
  1769.  
  1770.  ADDRESS COMMAND
  1771.  'echo >SYS:Prefs/'UnInstStarter '"failat 30"'
  1772.  'echo >>SYS:Prefs/'UnInstStarter '"stack 20000"'
  1773.  'echo >>SYS:Prefs/'UnInstStarter '"copy 'UnInstDir'/'UnInstScrName'#? T: CLONE QUIET"'
  1774.  'echo >>SYS:Prefs/'UnInstStarter '"run >NIL: execute T:'UnInstScrName'"'
  1775.  
  1776.  IconPath=RootPath'SYS/Inst_SYS/Prefs'
  1777.  Icon='UnInst_.info'
  1778.  IF EXISTS(IconPath'/'Icon) THEN
  1779.     ADDRESS COMMAND 'Install_C:rename' IconPath'/'Icon IconPath'/'UnInstStarter'.info'
  1780.  
  1781.  TheFile = UnInstDir'/'UnInstScrName
  1782.  IF ~Open(USCRIPT, TheFile, 'W') THEN Err_ShowMessage(TheFile)
  1783.  
  1784.  r=WLine('failat 30')
  1785.  r=WLine('cd T:')
  1786.  r=WLine('newshell "CON:$SHELLSIZE/$SHELLTITLE/Close" from T:'UnInstScrName'.0')
  1787.  CALL SpaceNextEntry
  1788.  
  1789.  r=Close(USCRIPT)
  1790.  
  1791.  
  1792.  /* ------------------- */
  1793.  
  1794.  TheFile = UnInstDir'/'UnInstScrName'.0'
  1795.  
  1796.  IF EXISTS(TheFile) THEN ADDRESS COMMAND delete' 'TheFile' QUIET'
  1797.  
  1798.  IF ~Open(USCRIPT, TheFile, 'W') THEN Err_ShowMessage(TheFile)
  1799.  
  1800.  r=WLine('failat 30')
  1801.  r=WLine('cd T:')
  1802.  r=WLine('echo "*ec*n*n"')
  1803.  r=WLine('echo " This is the UnInstall-Script for 'InstApp'."')
  1804.  r=WLine('echo "*nIt will guide you by dialog through de-installation."')
  1805.  r=WLine('echo "*nYou may always stop actions by pressing <Ctrl><c>"')
  1806.  r=WLine('echo "and you may stop the whole script by pressing <Ctrl><d>"')
  1807.  r=WLine('echo "*n[y/n] marks mean, that y[ENTER] = Yes  n[]ENTER = No.*n"')
  1808.  r=WLine('ask "Please press ENTER to continue [ok]"')
  1809.  r=WLine('echo "*ec*n*n"')
  1810.  
  1811. RETURN
  1812.  
  1813. /* ------------------- */
  1814. Un_UnInstallScripts:
  1815.  
  1816.  r=WLine('ask " Remove all UnInstall-Scripts now? [y/n] "')
  1817.  r=WLine('if warn')
  1818.  r=WLine('  delete 'UnInstDir'/'UnInstScrName'#?')
  1819.  r=WLine('  delete T:'UnInstScrName'#? QUIET')
  1820.  r=WLine('endif')
  1821.  r=WLine('delete 'UnInstDir' QUIET')
  1822.  CALL SpaceNextEntry
  1823.  
  1824. RETURN
  1825.  
  1826. /*---------------------*/
  1827. SpaceNextEntry:
  1828.  
  1829.  r=WLine('wait 1')
  1830.  r=WLine('echo "*ec*n*n"')
  1831.  r=WLine(' ')
  1832.  
  1833. RETURN
  1834.  
  1835. /* -------------- */
  1836. WLine:
  1837. PARSE ARG TheLine
  1838.  
  1839.  r=WriteLn(USCRIPT, TheLine)
  1840.  
  1841. RETURN 1
  1842.  
  1843. /*----------------------------------------------------------------*/
  1844. Do_and_Log:
  1845.  
  1846.  r=WriteLn(LOGFILE, 'Executed Commands for 'InstName':')
  1847.  r=WriteLn(LOGFILE, ' ')
  1848.  
  1849.  DO i=1 to 100
  1850.  
  1851.    IF(Command.i='COMMAND.'i) THEN LEAVE
  1852.  
  1853.    TheCommand = LEFT(UPPER(Command.i),12)
  1854.    IF (POS('ECHO', TheCommand)=0 & POS('FAILAT',TheCommand)=0 & POS('IF ',TheCommand)=0 & POS('ELSE',TheCommand)=0 & POS('ENDIF',TheCommand)=0 & POS('SKIP ',TheCommand)=0 & POS('QUIT',TheCommand)=0 & POS('ENDCLI',TheCommand)=0  ) THEN
  1855.     DO
  1856.      ADDRESS COMMAND Command.i
  1857.  
  1858.      ResultCommand = RC
  1859.  
  1860.      r=WriteLn(LOGFILE, Command.i)
  1861.      Command.i = 'COMMAND.'i
  1862.     END
  1863.  END
  1864.  
  1865.  CALL LogLine
  1866.  
  1867.  RETURN
  1868.  
  1869. /*----------------------------------------------------------------*/
  1870. ShowMessage:
  1871.  
  1872.  CALL ShowTheMessage
  1873.  
  1874.  IF (Log_exists=1) THEN CALL LogLine
  1875.  
  1876. RETURN
  1877.  
  1878. /*-------------*/
  1879. ShowTheMessage:
  1880.  
  1881.  drop Action
  1882.  ReqType = ''
  1883.  
  1884.  MsgFile = RootPath'Install-Guide/'Language'/'Msg
  1885.  IF ~Open(fTmp, MsgFile, 'read') THEN Err_ShowMessage(MsgFile)
  1886.  ELSE
  1887.   DO
  1888.     ReqType = ReadLn(fTmp) /* read Requester-Type */
  1889.  
  1890.     Line = ReadLn(fTmp)    /* read Title-Line */
  1891.     CALL Substitutions
  1892.     ReqTitle = Line
  1893.  
  1894.     Line = ReadLn(fTmp)    /* free line after Title */
  1895.  
  1896.     Message = ""
  1897.  
  1898.     DO UNTIL EOF(fTmp)
  1899.  
  1900.      Line = ReadLn(fTmp)
  1901.      CALL Substitutions
  1902.  
  1903.      IF POS(">>>", Line) > 0 THEN
  1904.        DO
  1905.          rtBtns = STRIP(Line, 'L', '>')
  1906.          LEAVE
  1907.        END
  1908.      ELSE
  1909.          Message = Message || CR || Line
  1910.     END
  1911.  
  1912.     r=Close(fTmp)
  1913.   END
  1914.  
  1915.   IF (Log_exists = 1) THEN
  1916.    DO
  1917.       r=WriteLn(LOGFILE, Message)
  1918.       r=WriteLn(LOGFILE, ' ')
  1919.       r=WriteLn(LOGFILE, rtBtns)
  1920.       r=WriteLn(LOGFILE, ' ')
  1921.    END
  1922.  
  1923.   IF (UPPER(ReqType) = 'MULTI REQUEST') THEN
  1924.    DO
  1925.       Action = rtezrequest(Message,rtBtns,ReqTitle,PosTags)
  1926.       IF (Log_exists = 1) THEN r=WriteLn(LOGFILE, ' ----> Chosen Button-Nr.: 'Action)
  1927.       RETURN
  1928.    END
  1929.  
  1930.   IF (UPPER(ReqType) = 'GETSTRING') THEN
  1931.    DO
  1932.       SelectedString = rtgetstring(PresetString,Message,ReqTitle,rtBtns,GStags,Action)
  1933.       IF (Log_exists = 1) THEN r=WriteLn(LOGFILE, ' ----> Chosen String: 'SelectedString)
  1934.       IF (Log_exists = 1) THEN r=WriteLn(LOGFILE, ' ----> Chosen Button-Nr.: 'Action)
  1935.       RETURN
  1936.    END
  1937.  
  1938.   IF (UPPER(ReqType) = 'GET ONE FILE') THEN
  1939.    DO
  1940.       SelectedFile = rtfilerequest(ActualPath,ActualName,ReqTitle,rtBtns, ONEFILE_TAG, Files)
  1941.       IF (Log_exists = 1) THEN r=WriteLn(LOGFILE, ' ----> Chosen File: 'SelectedFile)
  1942.       RETURN
  1943.    END
  1944.  
  1945.   IF (UPPER(ReqType) = 'GETPATH') THEN
  1946.    DO
  1947.       SelectedPath = rtfilerequest(ActualPath,,ReqTitle,rtBtns, DIR_TAGS)
  1948.       IF (Log_exists = 1) THEN r=WriteLn(LOGFILE, ' ----> Chosen Path: 'SelectedPath)
  1949.       RETURN
  1950.    END
  1951.  
  1952.   IF (UPPER(ReqType) = 'GETFILES') THEN
  1953.    DO
  1954.       SelectedFiles = rtfilerequest(ActualPath,,ReqTitle,rtBtns, FILE_TAGS, Files)
  1955.       IF (Log_exists = 1) THEN r=WriteLn(LOGFILE, ' ----> Chosen Files: 'SelectedFiles'...')
  1956.       RETURN
  1957.    END
  1958.  
  1959.   Err_ShowMessage(MsgFile)  /* Error if arrived here. Exit. */
  1960.  
  1961. RETURN
  1962.  
  1963. /*--------------------------------------------*/
  1964. Substitutions:
  1965.  
  1966.  IF POS("%1", Line) > 0 THEN
  1967.  DO UNTIL POS("%1", Line) = 0
  1968.      parse var Line part1 '%1' part2
  1969.      Line = part1''Parameter1''part2
  1970.  END
  1971.  
  1972.  IF POS("%2", Line) > 0 THEN
  1973.  DO UNTIL POS("%2", Line) = 0
  1974.      parse var Line part1 '%2' part2
  1975.      Line = part1''Parameter2''part2
  1976.  END
  1977.  
  1978.  IF POS("%3", Line) > 0 THEN
  1979.  DO UNTIL POS("%3", Line) = 0
  1980.      parse var Line part1 '%3' part2
  1981.      Line = part1''Parameter3''part2
  1982.  END
  1983.  
  1984.  IF POS("%4", Line) > 0 THEN
  1985.  DO UNTIL POS("%4", Line) = 0
  1986.      parse var Line part1 '%4' part2
  1987.      Line = part1''Parameter4''part2
  1988.  END
  1989.  
  1990.  IF POS("%5", Line) > 0 THEN
  1991.  DO UNTIL POS("%5", Line) = 0
  1992.      parse var Line part1 '%5' part2
  1993.      Line = part1''Parameter5''part2
  1994.  END
  1995.  
  1996.  IF POS("%6", Line) > 0 THEN
  1997.  DO UNTIL POS("%6", Line) = 0
  1998.      parse var Line part1 '%6' part2
  1999.      Line = part1''Parameter6''part2
  2000.  END
  2001.  
  2002. RETURN
  2003.  
  2004. /*--------------------------------------------*/
  2005. Err_ShowMessage:
  2006.  PARSE ARG ErrFile
  2007.  
  2008.  Message = AppName':' CR CR "Sorry, an error has occured accessing the File" CR CR "    "ErrFile CR CR "... exiting."
  2009.  rtBtns = 'Oh no!'
  2010.  Action = rtezrequest(Message,rtBtns,ReqTitle,PosTags)
  2011.  
  2012.  MustQuit=1
  2013.  CALL ExitMe
  2014.  
  2015.  
  2016. /*-- Break if wrong Directory --------------------------------------- */
  2017.  
  2018.  CheckInstallDir:
  2019.  
  2020.  IF (~EXISTS(ObligedFile) | CurrentDir="NOTHING") THEN
  2021.   DO
  2022.      Msg="_StartAgain"
  2023.      Parameter1 = AppName
  2024.      Parameter2 = ObligedFile
  2025.      CALL ShowMessage
  2026.  
  2027.      MustQuit=1
  2028.      CALL ExitMe
  2029.   END
  2030.  
  2031.  RETURN
  2032.  
  2033. /* ------------------------- */
  2034. RexxInstallInfo:
  2035.  
  2036.  IF EXISTS('ENV:MsgFlag') THEN  /* Rexx Info if needed */
  2037.   DO
  2038.      Msg='_Rexx_log'
  2039.      Parameter1 = AppName
  2040.      CALL ShowMessage
  2041.  
  2042.      ADDRESS COMMAND
  2043.          delete' ENV:MsgFlag QUIET'
  2044.   END
  2045.  
  2046.  RETURN
  2047.  
  2048. /* ------------------------- */
  2049. ExistsFile:
  2050.  
  2051.  IF ~EXISTS(ObligedFile) THEN
  2052.    DoesNotExist = 1
  2053.  ELSE
  2054.    DoesNotExist = 0
  2055.  
  2056. RETURN
  2057.  
  2058. /*----------------------------------------------------------------*/
  2059. MyGetENV:     PROCEDURE
  2060.  PARSE ARG name
  2061.  
  2062.  TheFile = "ENV:" || name
  2063.  IF (Open(fTmp, TheFile, 'read')) THEN
  2064.    DO
  2065.       ENVvalue = ReadLn(fTmp)
  2066.       Closed = Close(fTmp)
  2067.    END
  2068.  ELSE
  2069.    DO
  2070.       ENVvalue = "NOTHING"
  2071.    END
  2072.  
  2073.  RETURN ENVvalue
  2074.  
  2075. /*-----------------------------------------------*/
  2076. CreateLogFile:
  2077.  
  2078.  /* ---- Create MainLog (a AmigaGuide-file) */
  2079.  
  2080.  MainLog = 'Help:'InstBase'_MainLog.log'
  2081.  TempLog = 'T:'InstBase'_MainLog.log'
  2082.  separator='____________________________________________________________________'
  2083.  
  2084.  IF ~EXISTS(MainLog) THEN
  2085.  DO
  2086.   WasNoMainLog=1
  2087.  
  2088.   IF ~Open(fTmp, TempLog, 'W') THEN Err_ShowMessage(TempLog)
  2089.  
  2090.   r=WriteLn(fTmp, '@database "MARInA_Installer_Logfile"')
  2091.   r=WriteLn(fTmp, " ")
  2092.   r=WriteLn(fTmp, "@author MARInA-Installer, automatic generated file.")
  2093.   r=WriteLn(fTmp, "@(c) Tom Neidhardt, 1998")
  2094.   r=WriteLn(fTmp, "@$VER: MARInA-Installer 3.0")
  2095.   r=WriteLn(fTmp, " ")
  2096.   r=WriteLn(fTmp, "@font helvetica.font 13")
  2097.   r=WriteLn(fTmp, "@wordwrap")
  2098.   r=WriteLn(fTmp, " ")
  2099.   r=WriteLn(fTmp, " ")
  2100.   r=WriteLn(fTmp, '@Node Main "Installation Logbook       MARInA-Installer, © 1998 by Tom Neidhardt"')
  2101.   r=WriteLn(fTmp, " ")
  2102.   r=WriteLn(fTmp, '    @{b}'InstBase' Installation logbook@{ub}')
  2103.   r=WriteLn(fTmp, " ")
  2104.   r=WriteLn(fTmp, "        "Author)
  2105.   r=WriteLn(fTmp, separator)
  2106.   r=WriteLn(fTmp, " ")
  2107.  
  2108.   r=Close(fTmp)
  2109.  
  2110.   ADDRESS COMMAND
  2111.     copy' "'TempLog'" "'MainLog'" CLONE QUIET'
  2112.     delete' "'TempLog'" QUIET'
  2113.  END
  2114.  
  2115.  /* ---- Create SubLog, a simple ASCII-file, accessable by MainLog */
  2116.  
  2117.  SubLog = 'HELP:'InstModule'_SubLog.log'
  2118.  IF ~Open(LOGFILE, SubLog, 'W') THEN Err_ShowMessage(SubLog)
  2119.  
  2120.  ADDRESS COMMAND 'Install_C:date >ENV:'ProcessNumber'_date'
  2121.  TheDate = MyGetENV(ProcessNumber'_date')
  2122.  Message = CR 'Protocol:  'AppName'       'TheDate
  2123.  Message = Message || CR || separator || CR CR CR
  2124.  r=WriteLn(LOGFILE, Message)
  2125.  
  2126.  ADDRESS COMMAND delete' ENV:'ProcessNumber'_date QUIET'
  2127.  Log_exists = 1
  2128.  
  2129.  
  2130.  /* ---- Enhance a MainLog-Link for Sublog */
  2131.  
  2132.  IF ~Open(MAINFILE, MainLog, 'R') THEN Err_ShowMessage(MainLog)
  2133.  IF ~Open(fTmp, TempLog, 'W') THEN Err_ShowMessage(TempLog)
  2134.  
  2135.  line=' '
  2136.  LastEntry=0
  2137.  NewEntry=1
  2138.  FirstNewLine='      @{"   " link 'SubLog'/main}   Show the Install-Log for @{b}'InstModule'@{ub}'
  2139.  
  2140.  DO UNTIL EOF(MAINFILE)
  2141.     line=ReadLn(MAINFILE)
  2142.  
  2143.     IF (line=FirstNewLine) THEN NewEntry=0
  2144.  
  2145.     IF (LEFT(line,1)='.') THEN LastEntry=1
  2146.  
  2147.     IF (LastEntry=0) THEN r=WriteLn(fTmp, line)
  2148.  END
  2149.  
  2150.  IF (NewEntry=1) THEN
  2151.  DO
  2152.   r=WriteLn(fTmp, ' ')
  2153.   r=WriteLn(fTmp, FirstNewLine)
  2154.  END
  2155.  
  2156.  r=WriteLn(fTmp, '.')
  2157.  r=WriteLn(fTmp, ' ')
  2158.  r=WriteLn(fTmp, separator)
  2159.  r=WriteLn(fTmp, '@ENDNODE')
  2160.  
  2161.  r=Close(fTmp)
  2162.  r=Close(MAINFILE)
  2163.  
  2164.  ADDRESS COMMAND
  2165.  copy' "'TempLog'" "'MainLog'" CLONE QUIET'
  2166.  delete' "'TempLog'" QUIET'
  2167.  
  2168. RETURN
  2169.  
  2170. /* ----------- */
  2171. LogLine:
  2172.  
  2173.  r=WriteLn(LOGFILE, ' ')
  2174.  r=WriteLn(LOGFILE, '>>>----------------------------------------------------------------------------------')
  2175.  
  2176.  RETURN
  2177.  
  2178. /*----------------------------------------------------------------*/
  2179. GetLanguage:
  2180.  
  2181. LanguageNumber = 1      /* Presets */
  2182. Language = ''
  2183.  
  2184. IF (open(TEMPFILE, 'ENV:sys/locale.prefs', 'read')) THEN
  2185.  DO
  2186.    DO i = 1 to 50
  2187.        r = READCH(TEMPFILE)
  2188.    END
  2189.  
  2190.    Land = ''
  2191.  
  2192.    i=0
  2193.    DO UNTIL EOF(TEMPFILE)
  2194.        i = i+1
  2195.        Char = ReadCh(TEMPFILE)
  2196.        IF (C2D(Char) = 0) THEN
  2197.            LEAVE
  2198.        ELSE
  2199.            Land = Land''Char
  2200.    END
  2201.  
  2202.    /* 32 characters from begin of Lang_x to begin of Lang_y */
  2203.    DO j = i to 31 UNTIL EOF(TEMPFILE)  /* jump over next 20 chars */
  2204.     r = READCH(TEMPFILE)
  2205.    END
  2206.  
  2207.    Language = ReadLanguage()
  2208.    r = Close(TEMPFILE)
  2209.  END
  2210.  
  2211.  IF (Language='') THEN Language = 'english'
  2212.  
  2213.  drop Char
  2214.  drop r
  2215.  
  2216.  RealLanguage=Language
  2217.  ADDRESS COMMAND 'setenv LANGUAGE 'RealLanguage
  2218.  
  2219.  IF ~EXISTS(Language'/_QuitInstall') THEN Language = 'english'
  2220.  
  2221. RETURN
  2222.  
  2223. RETURN
  2224.  
  2225. /*----------------------------------*/
  2226. ReadLanguage:
  2227.  
  2228.  Langua = ''
  2229.  
  2230.  Langua = ReadCh(TEMPFILE)
  2231.  IF (C2D(Langua)=0) THEN RETURN ''
  2232.  
  2233.  i=1
  2234.  DO UNTIL EOF(TEMPFILE)
  2235.     i=i+1
  2236.     Char = ReadCh(TEMPFILE)
  2237.     IF (C2D(Char)=0) THEN
  2238.       LEAVE
  2239.     ELSE
  2240.       Langua = Langua''Char
  2241.  END
  2242.  
  2243.  /* 30 characters from begin of Lang_x to begin of Lang_y */
  2244.  DO j = i to 29 UNTIL EOF(TEMPFILE)
  2245.     r = READCH(TEMPFILE)
  2246.  END
  2247.  
  2248. RETURN Langua
  2249.  
  2250. /*----------------------------------------------------------------*/
  2251. ExitMe:
  2252.  
  2253.  r=PRAGMA('DIRECTORY', CurrentDir)
  2254.  
  2255.  IF ~(Msg='_Intro1' | Msg='_Intro2') THEN
  2256.  DO
  2257.   IF(WasNoMainLog=1) THEN
  2258.   DO
  2259.    r=WLine('if exists 'MainLog)
  2260.    r=WLine(' delete 'MainLog)
  2261.    r=WLine('endif')
  2262.   END
  2263.  
  2264.   r=WLine('if exists 'SubLog)
  2265.   r=WLine(' delete 'SubLog)
  2266.   r=WLine('endif')
  2267.  
  2268.   r=WLine(' ')
  2269.   r=WLine('wait 1')
  2270.   r=WLine('echo "*ec*n*n 'InstApp' De-Installation completed.*n*n Exiting in 5 secs."')
  2271.   r=WLine('wait 5')
  2272.   r=WLine('endcli')
  2273.  END
  2274.  
  2275.  IF (DestFull = 1) THEN
  2276.  DO
  2277.    Msg = '_CopyProtected'
  2278.    Parameter1 = AppName
  2279.    Parameter2 = ActualFile
  2280.    Parameter3 = '10'
  2281.    Parameter4 = Target
  2282.    CALL ShowMessage
  2283.  END
  2284.  
  2285.  IF ~(MustQuit = 1 | DestFull = 1) THEN
  2286.  DO
  2287.    Msg = '_QuitInstall'
  2288.    Parameter1 = AppName
  2289.    CALL ShowMessage
  2290.  
  2291.    IF (Action = 0) THEN RETURN
  2292.  END
  2293.  
  2294.  r=Close(fTmp)
  2295.  r=Close(USCRIPT)
  2296.  r=Close(SSCRIPT)
  2297.  r=Close(LOGFILE)
  2298.  
  2299.  ADDRESS COMMAND RootPath'Install-Guide/c/assign Install_C: REMOVE'
  2300.  
  2301.  ViewPort='INST_'UPPER(InstModule)
  2302.  IF SHOW('P',ViewPort) THEN /* Open the App's Guide */
  2303.  DO
  2304.   ModuleGuide='HELP:'Language'/'InstModule'.guide'
  2305.   IF EXISTS(ModuleGuide) THEN
  2306.   DO
  2307.     ADDRESS VALUE ViewPort
  2308.     'OPEN NAME' ModuleGuide
  2309.   END
  2310.  
  2311.   ADDRESS COMMAND
  2312.   RootPath'SYS/Choice_MARInA_bin/SWindow >NIL: "'InstModule', ©#?" p p 594 m'
  2313.   RootPath'SYS/Choice_MARInA_bin/SWindow >NIL: "'InstModule', ©#?" f'
  2314.  
  2315.   ADDRESS VALUE ViewPort 'RELOAD'
  2316.  END
  2317.  
  2318.  EXIT 0
  2319.